#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include<string.h>
#include<stdlib.h>

#include <stdio.h>
#include<string.h>
int main()
{
    char str[500] = { '\0' };
    int bur[128] = { 0 };
    scanf("%s", str);
    int sum = 0;
    for (int i = 0; i < strlen(str); i++)
    {
        bur[str[i]]++;
    }
    for (int i = 0; i < 128; i++)
    {
        if (bur[i])
            sum++;
    }
    printf("%d", sum);
    return 0;
}

//char cmp(void* a, void* b)
//{
//    return *(char*)a - *(char*)b;
//}
//
//int main()
//{
//    char str1[500], str2[500];
//    scanf("%s", str1);
//    for (int i = 0; i < strlen(str1); i++)
//    {
//        if (str1[i] < 0 || str1[i]>127)
//        {
//            for (int j = i; j < strlen(str1); j++)
//            {
//                str1[j] = str1[j + 1];
//            }
//        }
//    }
//    qsort(str1, strlen(str1), sizeof(char), cmp);
//    char* fast = str1, * low = str1;
//    int index = 0, flag = 0;
//    while (*fast)
//    {
//        if (flag == 0)
//        {
//            str2[index++] = *fast;
//            flag = 1;
//        }
//        if (*fast != *low)
//        {
//            low = fast;
//            str2[index++] = *fast;
//        }
//        fast++;
//    }
//    printf("%d", index);
//    return 0;
//}
//int pivotIndex(int* nums, int numsSize)
//{
//    for (int i = 0; i < numsSize; i++)
//    {
//        int index = i, sum1 = 0, sum2 = 0;
//        for (int j = 0; j < numsSize; j++)
//        {
//            if (j < index)
//                sum1 += nums[j];
//            else if (j > index)
//                sum2 += nums[j];
//        }
//        if (sum1 == sum2)
//            return index;
//    }
//    return -1;
//}
//
//void Swap(char* x, char* y)
//{
//    char tmp = *x;
//    *x = *y;
//    *y = tmp;
//}
//
//int main()
//{
//    char arr[1000];
//    scanf("%s", arr);
//    int len = strlen(arr);
//    for (int i = 0; i < len - 1; i++)
//    {
//        for (int j = 0; j < len - 1 - i; j++)
//        {
//            if (arr[j] > arr[j + 1])
//                Swap(&arr[j], &arr[j + 1]);
//        }
//    }
//    printf("%s", arr);
//    return 0;
//}

//int cmp(void* a, void* b)
//{
//    return *(int*)a - *(int*)b;
//}
//
//int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
//{
//    qsort(nums1, nums1Size, sizeof(int), cmp);
//    qsort(nums2, nums2Size, sizeof(int), cmp);
//    *returnSize = 0;
//    int index1 = 0, index2 = 0;
//    int* intersection = (int*)malloc(sizeof(int) * (nums1Size + nums2Size));
//    while (index1 < nums1Size && index2 < nums2Size)
//    {
//        int num1 = nums1[index1], num2 = nums2[index2];
//        if (num1 == num2)
//        {
//            if (!(*returnSize) || num1 != intersection[(*returnSize) - 1])
//            {
//                intersection[(*returnSize)++] = num1;
//            }
//            index1++;
//            index2++;
//        }
//        else if (num1 < num2)
//        {
//            index1++;
//        }
//        else
//        {
//            index2++;
//        }
//    }
//    return intersection;
//}